main(List<String> args) {
  var p = Person.withNameAgeHeight('初沉池', 18, 220.00);
  print(p);

// 默认情况下所有类都继承至Object;
  Object obj = 'why'; // ( 编译时会报错 )
  print(obj); // 这里不能调用其他字类的方法
// dynamic 就是 any   ( dynamic 和 var 不一样 : dynamic是明确声明 var是类型推导 )
  dynamic obj2 = 'why2'; // ( 编译时不报错 运行可能报错 )
  // substring 删除字符串开头的;
  print(obj2.substring(1));

  var p1 = Person.fromMap({'name': '嗷呜', 'age': 18, 'height': 1.88});
  print(p1); // 直接是打印不出来的 需要在类里面重写toString ( 看下面 )
}

class Person {
  String name;
  int age;
  double height;
  // 命名构造函数
  Person(this.name, this.age);

  Person.withNameAgeHeight(this.name, this.age, this.height);

  Person.fromMap(Map<String, dynamic> map) {
    this.name = map['name'];
    this.age = map['age'];
    this.height = map['height'];
  }
  // 重写toString 打印映射
  String toString() {
    return '$name,$age $height';
  }
}
